Loading Libraries

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.4     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
# install.packages("vtable")
library(vtable)
## Loading required package: kableExtra
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# install.packages("Hmisc")
library("Hmisc")
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
# install.packages("corrplot")
library(corrplot)
## corrplot 0.92 loaded
library(naniar)
library(corrplot)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.2. https://CRAN.R-project.org/package=stargazer
library(htmltools)
library(AER)
## Loading required package: car
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
library(plm)
## 
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
## 
##     between, lag, lead
library("imputeTS")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## 
## Attaching package: 'imputeTS'
## The following object is masked from 'package:zoo':
## 
##     na.locf

Loading Data

df <- read_csv("../../data/final/merged_data.csv")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   .default = col_double(),
##   iso = col_character(),
##   country_name = col_character(),
##   hdi_value = col_character()
## )
## ℹ Use `spec()` for the full column specifications.
adb <- read_csv("../../data/final/adb-members.csv")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   country_name = col_character(),
##   iso = col_character(),
##   region = col_character(),
##   donor = col_double(),
##   sids = col_double(),
##   ldc = col_double()
## )
output.fig.dir <- "../../output/figures"
output.tab.dir <- "../../output/tables"

SAVE.RESULTS <- TRUE

df <- df %>%
  rename(
    migrant_stock = ims_both_sex,
    refugee_stock = estimated_refugee_stock_incl_asylum_seekers_both_sexes,
    disaster_displacement = disaster_stock_displacementr_raw,
    conflict_displacement = conflict_stock_displacement_raw,
    climate_change = CCH,
    air_quality = AIR,
    rule_of_law = `value.Rule of Law: Estimate`,
    gov_effectiveness = `value.Government Effectiveness: Estimate`,
    corruption_control = `value.Control of Corruption: Estimate`,
    state_legit = `P1: State Legitimacy`,
    cpa_d_12 = D12,
    cpa_d_avg = D_avg,
    gdp = `GDP per capita (constant 2015 US$)`,
    gini = `value.Gini index (World Bank estimate)`
  ) %>%
  mutate(
    conflict_displacement = conflict_displacement / 10000,
    disaster_displacement = disaster_displacement / 10000,
    migrant_stock = migrant_stock / 10000,
    refugee_stock = refugee_stock / 10000,
    gdp = gdp / 1000,
    state_legit = 10 - state_legit,
    hdi_value = as.numeric(hdi_value)
  )
## Warning in mask$eval_all_mutate(quo): NAs introduced by coercion
col_names <- c(
  "migrant_stock" = "Migrant Stock (10,000s)",
  "refugee_stock" = "Refugee Stock (10,000s)",
  "disaster_displacement" = "Internal Displacement Due to Disasters (10,000s)",
  "conflict_displacement" = "Internal Displacement Due to Conflict (10,000s)",
  "climate_change" = "Climate Change",
  "air_quality" = "Air Quality",
  "rule_of_law" = "Rule of Law",
  "gov_effectiveness" = "Government Effectiveness",
  "corruption_control" = "Control of Corruption",
  "state_legit" = "State Legitimacy",
  "cpa_d_12" = "CPA: D-12",
  "cpa_d_avg" = "CPA: Cluster D Average",
  "gdp" = "GDP Per Capita (1,000s)",
  "hdi_value" = "HDI",
  "gini" = "Gini Index"
)

generic.cols <- c("iso", "year", "country_name", "region", "donor", "sids", "ldc")
outcome.cols <- c("state_legit", "cpa_d_avg", "cpa_d_12")

keep <- df %>%
  arrange(year, iso) %>%
  select(names(col_names)) %>%
  mutate(keep = if_any(everything(), ~ !is.na(.))) %>%
  pull(keep)

df <- df %>%
  arrange(year, iso) %>%
  select(iso, year, names(col_names)) %>%
  arrange(year) %>%
  filter(keep) %>%
  left_join(adb, by = "iso")

Dependent variables across time

With both donors and recipients, across regions

for (reg in unique(df$region)) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == "state_legit") {
      y.lim <- 10
    }
    plt <- df %>%
      filter(region == reg) %>%
      select("iso", "year", outcome) %>%
      drop_na() %>%
      ggplot(aes_string(x = "year", outcome)) +
      geom_line(aes(color = iso)) +
      geom_point(aes(color = iso)) +
      labs(title = reg, subtitle = paste(col_names[outcome], "across years")) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, "/year_X_", outcome, "_", tolower(str_replace(reg, " ", "-")), ".png", sep = ""))
    }
  }
}
## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(outcome)` instead of `outcome` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

With only recipients, across regions

for (reg in unique(df$region)) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == "state_legit") {
      y.lim <- 10
    }
    plt <- df %>%
      filter(region == reg & donor == 0) %>%
      select("iso", "year", outcome) %>%
      drop_na() %>%
      ggplot(aes_string(x = "year", outcome)) +
      geom_line(aes(color = iso)) +
      geom_point(aes(color = iso)) +
      labs(title = reg, subtitle = paste(col_names[outcome], "across years")) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, "/year_X_", outcome, "_", tolower(str_replace(reg, " ", "-")), "_recipients", ".png", sep = ""))
    }
  }
}
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Across donor and recipient countries

for (status in c("Donors", "Recipients")) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == "state_legit") {
      y.lim <- 10
    }
    plt <- df %>%
      mutate(donor = ifelse(donor, "Donors", "Recipients")) %>%
      filter(donor == status) %>%
      select("iso", "year", outcome) %>%
      drop_na() %>%
      ggplot(aes_string(x = "year", outcome)) +
      geom_line(aes(color = iso)) +
      geom_point(aes(color = iso)) +
      labs(title = status, subtitle = paste(col_names[outcome], "across years")) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, "/year_X_", outcome, "_", tolower(status), ".png", sep = ""))
    }
  }
}
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Paired Scatterplots

## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(generic.cols)` instead of `generic.cols` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(col)` instead of `col` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image
## Warning in max(sdf$year): no non-missing arguments to max; returning -Inf
## Warning in min(sdf$year): no non-missing arguments to min; returning Inf
## Warning in max(sdf$year): no non-missing arguments to max; returning -Inf
## Warning in min(sdf$year): no non-missing arguments to min; returning Inf

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Saving 7 x 5 in image
## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

## Warning: ggrepel: 8 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Saving 7 x 5 in image
## Warning: ggrepel: 8 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Fixed Effects Regression

Without imputing missing data

climate.model <- plm(state_legit ~ air_quality + climate_change + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

migration.model <- plm(state_legit ~ migrant_stock + refugee_stock + conflict_displacement + disaster_displacement + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

governance.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

full.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + conflict_displacement + disaster_displacement + climate_change + air_quality + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

stargazer(climate.model, migration.model, governance.model, full.model, type = "text")
## 
## =======================================================================================================
##                                                      Dependent variable:                               
##                       ---------------------------------------------------------------------------------
##                                                          state_legit                                   
##                               (1)                (2)                  (3)                   (4)        
## -------------------------------------------------------------------------------------------------------
## air_quality                  0.001                                                         0.005       
##                             (0.004)                                                       (0.005)      
##                                                                                                        
## climate_change              -0.004                                                        -0.003       
##                             (0.003)                                                       (0.004)      
##                                                                                                        
## migrant_stock                                   -0.001                                                 
##                                                (0.004)                                                 
##                                                                                                        
## refugee_stock                                   0.003                                                  
##                                                (0.008)                                                 
##                                                                                                        
## conflict_displacement                           -0.003                                    -0.002       
##                                                (0.002)                                    (0.003)      
##                                                                                                        
## disaster_displacement                           0.008*                                     0.004       
##                                                (0.004)                                    (0.005)      
##                                                                                                        
## rule_of_law                                                          -0.098                0.079       
##                                                                     (0.228)               (0.572)      
##                                                                                                        
## gov_effectiveness                                                   -0.438**              -0.347       
##                                                                     (0.191)               (0.399)      
##                                                                                                        
## corruption_control                                                  0.869***               0.307       
##                                                                     (0.179)               (0.426)      
##                                                                                                        
## gdp                         -0.055              -0.134              -0.046**              -0.167*      
##                             (0.046)            (0.095)              (0.022)               (0.085)      
##                                                                                                        
## -------------------------------------------------------------------------------------------------------
## Observations                  216                116                  562                   172        
## R2                           0.023              0.109                0.063                 0.074       
## Adjusted R2                 -0.243              -0.423               -0.039               -0.298       
## F Statistic           1.341 (df = 3; 169) 1.766 (df = 5; 72) 8.476*** (df = 4; 506) 1.221 (df = 8; 122)
## =======================================================================================================
## Note:                                                                       *p<0.1; **p<0.05; ***p<0.01
if (SAVE.RESULTS) {
  stargazer(climate.model, migration.model, governance.model, full.model, type = "html", out = paste(output.tab.dir, "/state_legit_reg_fe.html", sep = ""))
}
## 
## <table style="text-align:center"><tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td colspan="4"><em>Dependent variable:</em></td></tr>
## <tr><td></td><td colspan="4" style="border-bottom: 1px solid black"></td></tr>
## <tr><td style="text-align:left"></td><td colspan="4">state_legit</td></tr>
## <tr><td style="text-align:left"></td><td>(1)</td><td>(2)</td><td>(3)</td><td>(4)</td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">air_quality</td><td>0.001</td><td></td><td></td><td>0.005</td></tr>
## <tr><td style="text-align:left"></td><td>(0.004)</td><td></td><td></td><td>(0.005)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">climate_change</td><td>-0.004</td><td></td><td></td><td>-0.003</td></tr>
## <tr><td style="text-align:left"></td><td>(0.003)</td><td></td><td></td><td>(0.004)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">migrant_stock</td><td></td><td>-0.001</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">refugee_stock</td><td></td><td>0.003</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.008)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">conflict_displacement</td><td></td><td>-0.003</td><td></td><td>-0.002</td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.002)</td><td></td><td>(0.003)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">disaster_displacement</td><td></td><td>0.008<sup>*</sup></td><td></td><td>0.004</td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td><td>(0.005)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">rule_of_law</td><td></td><td></td><td>-0.098</td><td>0.079</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.228)</td><td>(0.572)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gov_effectiveness</td><td></td><td></td><td>-0.438<sup>**</sup></td><td>-0.347</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.191)</td><td>(0.399)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">corruption_control</td><td></td><td></td><td>0.869<sup>***</sup></td><td>0.307</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.179)</td><td>(0.426)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gdp</td><td>-0.055</td><td>-0.134</td><td>-0.046<sup>**</sup></td><td>-0.167<sup>*</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.046)</td><td>(0.095)</td><td>(0.022)</td><td>(0.085)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Observations</td><td>216</td><td>116</td><td>562</td><td>172</td></tr>
## <tr><td style="text-align:left">R<sup>2</sup></td><td>0.023</td><td>0.109</td><td>0.063</td><td>0.074</td></tr>
## <tr><td style="text-align:left">Adjusted R<sup>2</sup></td><td>-0.243</td><td>-0.423</td><td>-0.039</td><td>-0.298</td></tr>
## <tr><td style="text-align:left">F Statistic</td><td>1.341 (df = 3; 169)</td><td>1.766 (df = 5; 72)</td><td>8.476<sup>***</sup> (df = 4; 506)</td><td>1.221 (df = 8; 122)</td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"><em>Note:</em></td><td colspan="4" style="text-align:right"><sup>*</sup>p<0.1; <sup>**</sup>p<0.05; <sup>***</sup>p<0.01</td></tr>
## </table>

Imputing climate_change and air_quality variables

df.imp <- df

for (col in c("air_quality", "climate_change")) {
  for (country in unique(df.imp$iso)) {
    if (sum(!is.na(df.imp[(df.imp$iso == country), col])) >= 3) {
      df.imp[df.imp$iso == country & df.imp$year >= 2006, col] <- na_interpolation(df.imp[df.imp$iso == country & df.imp$year >= 2006, col])
    } else {
      print(paste(col, "-", country))
    }
  }
}
## [1] "air_quality - COK"
## [1] "air_quality - HKG"
## [1] "air_quality - NIU"
## [1] "air_quality - NRU"
## [1] "air_quality - TUV"
## [1] "climate_change - AFG"
## [1] "climate_change - COK"
## [1] "climate_change - FSM"
## [1] "climate_change - HKG"
## [1] "climate_change - MHL"
## [1] "climate_change - NIU"
## [1] "climate_change - NRU"
## [1] "climate_change - PLW"
## [1] "climate_change - TLS"
## [1] "climate_change - TUV"
if (SAVE.RESULTS) {
  write_csv(df.imp, "../../data/final/merged_data_imputed.csv")
}
climate.model <- plm(state_legit ~ air_quality + climate_change + gdp, data = df.imp, index = c("iso", "year"), model = "within", effect = "twoways")

migration.model <- plm(state_legit ~ migrant_stock + refugee_stock + conflict_displacement + disaster_displacement + gdp, data = df.imp, index = c("iso", "year"), model = "within", effect = "twoways")

governance.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + gdp, data = df.imp, index = c("iso", "year"), model = "within", effect = "twoways")

full.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + conflict_displacement + disaster_displacement + climate_change + air_quality + gdp, data = df.imp, index = c("iso", "year"), model = "within", effect = "twoways")

stargazer(climate.model, migration.model, governance.model, full.model, type = "text")
## 
## =============================================================================================================
##                                                         Dependent variable:                                  
##                       ---------------------------------------------------------------------------------------
##                                                             state_legit                                      
##                                (1)                  (2)                  (3)                    (4)          
## -------------------------------------------------------------------------------------------------------------
## air_quality                   0.001                                                           0.009***       
##                              (0.002)                                                          (0.003)        
##                                                                                                              
## climate_change              -0.006***                                                         -0.006**       
##                              (0.002)                                                          (0.003)        
##                                                                                                              
## migrant_stock                                      -0.001                                                    
##                                                   (0.004)                                                    
##                                                                                                              
## refugee_stock                                      0.003                                                     
##                                                   (0.008)                                                    
##                                                                                                              
## conflict_displacement                              -0.003                                      -0.002        
##                                                   (0.002)                                     (0.002)        
##                                                                                                              
## disaster_displacement                              0.008*                                      0.005         
##                                                   (0.004)                                     (0.004)        
##                                                                                                              
## rule_of_law                                                             -0.098                 0.021         
##                                                                        (0.228)                (0.343)        
##                                                                                                              
## gov_effectiveness                                                      -0.438**               -0.485**       
##                                                                        (0.191)                (0.228)        
##                                                                                                              
## corruption_control                                                     0.869***               0.752***       
##                                                                        (0.179)                (0.249)        
##                                                                                                              
## gdp                           -0.037               -0.134              -0.046**               -0.138**       
##                              (0.023)              (0.095)              (0.022)                (0.055)        
##                                                                                                              
## -------------------------------------------------------------------------------------------------------------
## Observations                   525                  116                  562                    366          
## R2                            0.031                0.109                0.063                  0.115         
## Adjusted R2                   -0.080               -0.423               -0.039                 -0.042        
## F Statistic           4.989*** (df = 3; 470) 1.766 (df = 5; 72) 8.476*** (df = 4; 506) 5.035*** (df = 8; 310)
## =============================================================================================================
## Note:                                                                             *p<0.1; **p<0.05; ***p<0.01
if (SAVE.RESULTS) {
  stargazer(climate.model, migration.model, governance.model, full.model, type = "html", out = paste(output.tab.dir, "/state_legit_reg_fe_imputed.html", sep = ""))
}
## 
## <table style="text-align:center"><tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td colspan="4"><em>Dependent variable:</em></td></tr>
## <tr><td></td><td colspan="4" style="border-bottom: 1px solid black"></td></tr>
## <tr><td style="text-align:left"></td><td colspan="4">state_legit</td></tr>
## <tr><td style="text-align:left"></td><td>(1)</td><td>(2)</td><td>(3)</td><td>(4)</td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">air_quality</td><td>0.001</td><td></td><td></td><td>0.009<sup>***</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.002)</td><td></td><td></td><td>(0.003)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">climate_change</td><td>-0.006<sup>***</sup></td><td></td><td></td><td>-0.006<sup>**</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.002)</td><td></td><td></td><td>(0.003)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">migrant_stock</td><td></td><td>-0.001</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">refugee_stock</td><td></td><td>0.003</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.008)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">conflict_displacement</td><td></td><td>-0.003</td><td></td><td>-0.002</td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.002)</td><td></td><td>(0.002)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">disaster_displacement</td><td></td><td>0.008<sup>*</sup></td><td></td><td>0.005</td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td><td>(0.004)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">rule_of_law</td><td></td><td></td><td>-0.098</td><td>0.021</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.228)</td><td>(0.343)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gov_effectiveness</td><td></td><td></td><td>-0.438<sup>**</sup></td><td>-0.485<sup>**</sup></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.191)</td><td>(0.228)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">corruption_control</td><td></td><td></td><td>0.869<sup>***</sup></td><td>0.752<sup>***</sup></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.179)</td><td>(0.249)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gdp</td><td>-0.037</td><td>-0.134</td><td>-0.046<sup>**</sup></td><td>-0.138<sup>**</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.023)</td><td>(0.095)</td><td>(0.022)</td><td>(0.055)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td><td></td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Observations</td><td>525</td><td>116</td><td>562</td><td>366</td></tr>
## <tr><td style="text-align:left">R<sup>2</sup></td><td>0.031</td><td>0.109</td><td>0.063</td><td>0.115</td></tr>
## <tr><td style="text-align:left">Adjusted R<sup>2</sup></td><td>-0.080</td><td>-0.423</td><td>-0.039</td><td>-0.042</td></tr>
## <tr><td style="text-align:left">F Statistic</td><td>4.989<sup>***</sup> (df = 3; 470)</td><td>1.766 (df = 5; 72)</td><td>8.476<sup>***</sup> (df = 4; 506)</td><td>5.035<sup>***</sup> (df = 8; 310)</td></tr>
## <tr><td colspan="5" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"><em>Note:</em></td><td colspan="4" style="text-align:right"><sup>*</sup>p<0.1; <sup>**</sup>p<0.05; <sup>***</sup>p<0.01</td></tr>
## </table>